package middle.code;

import lombok.extern.slf4j.Slf4j;

/**
 * 1.题目描述
 * 给定一个函数f1可以实现1-8范围内的等概率，
 * 通过这个函数而不使用别的函数实现 30 - 58 内等概率返回
 */
@Slf4j
public class Code02_Random {
    public static int f1() {
        return (int) (Math.random() * 8) + 1;
    }

    public static int f2() {
        return f1() <= 4 ? 0 : 1;
    }

    public static int f3() {
        int random = -1;
        do {
            random = (f2() << 4) + (f2() << 3) + (f2() << 2) + (f2() << 1) + (f2());
        } while (random >= 29);
        return random;
    }

    public static int f4() {
        return f3() + 30;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 4000; i++) {
            log.info("random 30~58, number: {}", f4());
        }
    }
}
